/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package quanlinganhang.view;

import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.text.JTextComponent;
import quanlinganhang.dao.LoginDAO;
import quanlinganhang.dao.UserDAO;
import quanlinganhang.dao.Validator;
import quanlinganhang.dto.UserDTO;

/**
 *
 * @author phamduong
 */
public class AddUser extends javax.swing.JDialog {

    /**
     * Creates new form AddUser
     */
    public AddUser(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        setLocationRelativeTo(LoginDAO.frmMain);
        setVisible(true);
    }

    /**
     * Show User edit form
     *
     * @param parent
     * @param modal
     * @param id
     * @param name
     * @param pass
     */
    public AddUser(java.awt.Frame parent, boolean modal, long id,
            String name, String pass, boolean isAdmin) {
        super(parent, modal);
        initComponents();
        txtId.setText(Long.toString(id));
        txtId.setEnabled(false);
        jbtAdd.setText("Lưu");
        txtUsername.setText(name);
        txtUsername.setEnabled(false);
        txtPass.setText(pass);
        chkAdmin.setSelected(isAdmin);
        //check if user is admin
        if (!LoginDAO.User.isIsAdmin()) {
            chkAdmin.setEnabled(false);
        }
        setLocationRelativeTo(LoginDAO.frmMain);
        setVisible(true);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        txtId = new javax.swing.JTextField();
        txtUsername = new javax.swing.JTextField();
        txtPass = new javax.swing.JTextField();
        chkAdmin = new javax.swing.JCheckBox();
        jbtAdd = new javax.swing.JButton();
        btCancel = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(0, 102, 153));
        jLabel1.setText("Thêm người dùng mới");

        jLabel2.setText("Mã người dùng");

        jLabel3.setText("Tên đăng nhập");

        jLabel4.setText("Mật khẩu");

        chkAdmin.setText("Là Admin");

        jbtAdd.setIcon(new javax.swing.ImageIcon(getClass().getResource("/quanlinganhang/resources/add.png"))); // NOI18N
        jbtAdd.setText("Thêm người dùng");
        jbtAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtAddActionPerformed(evt);
            }
        });

        btCancel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/quanlinganhang/resources/no.png"))); // NOI18N
        btCancel.setText("Hủy");
        btCancel.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btCancelActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(19, 19, 19)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel2)
                    .addComponent(jLabel3)
                    .addComponent(jLabel4))
                .addGap(49, 49, 49)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jbtAdd)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(btCancel))
                    .addComponent(chkAdmin)
                    .addComponent(txtId)
                    .addComponent(txtUsername)
                    .addComponent(txtPass, javax.swing.GroupLayout.PREFERRED_SIZE, 294, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(28, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addGap(102, 102, 102))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(19, 19, 19)
                .addComponent(jLabel1)
                .addGap(32, 32, 32)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(txtId, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(27, 27, 27)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(txtUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(22, 22, 22)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(txtPass, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(chkAdmin)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jbtAdd)
                    .addComponent(btCancel))
                .addContainerGap(31, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jbtAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtAddActionPerformed
        //if add new user
        if (jbtAdd.getText().equalsIgnoreCase("Thêm người dùng")) {
            JTextComponent[] tcp = {txtId, txtPass, txtUsername};
            if (!Validator.validateComponents(tcp)) {
                return;
            }
            String idtext = txtId.getText();
            if (Validator.isEmpty(idtext)) {
//            new CustomMessageDialog(null, true, "Lỗi nhập liệu",
//                    "Vui lòng nhập mã tài khoản!", CustomMessageDialog.MESSAGE);
                return;
            }

            String name = txtUsername.getText();
            if (Validator.isEmpty(name)) {
//            new CustomMessageDialog(null, true, "Lỗi nhập liệu",
//                    "Vui lòng nhập tên người dùng!", CustomMessageDialog.MESSAGE);
                return;
            }

            String pass = txtPass.getText();
            if (Validator.isEmpty(pass)) {
//            new CustomMessageDialog(null, true, "Lỗi nhập liệu",
//                    "Vui lòng nhập mật khẩu người dùng!", CustomMessageDialog.MESSAGE);
                return;
            }
            //JOptionPane.showMessageDialog(this, "co van de");
            boolean isAdmin = false;
            isAdmin = chkAdmin.isSelected();
            try {
                long id = Long.parseLong(idtext);
                UserDAO.AddUser(new UserDTO(id, name, pass, isAdmin));
                new CustomMessageDialog(null, true, "Thành công", "Thêm người dùng thành công", CustomMessageDialog.DONE);
                dispose();
//            ManageUser.reloadTable();
            } catch (NumberFormatException ex) {
                new CustomMessageDialog(null, true, "Lỗi nhập liệu",
                        "Vui lòng kiểm tra giá trị nhập liệu!", CustomMessageDialog.MESSAGE);
            } catch (ClassNotFoundException ex) {
                new CustomMessageDialog(null, true, "Lỗi cơ sở dữ liệu",
                        "Có lỗi trong quá trình thêm người dùng", CustomMessageDialog.MESSAGE);
            } catch (SQLException ex) {
                new CustomMessageDialog(null, true, "Lỗi cơ sở dữ liệu",
                        "Có lỗi trong quá trình thêm người dùng", CustomMessageDialog.MESSAGE);
            }
        } else {    //if updating user's info
            JTextComponent[] tcp = {txtId, txtPass, txtUsername};
            if (!Validator.validateComponents(tcp)) {
                return;
            }
            String idtext = txtId.getText();
            if (Validator.isEmpty(idtext)) {
//            new CustomMessageDialog(null, true, "Lỗi nhập liệu",
//                    "Vui lòng nhập mã tài khoản!", CustomMessageDialog.MESSAGE);
                return;
            }

            String name = txtUsername.getText();
            if (Validator.isEmpty(name)) {
//            new CustomMessageDialog(null, true, "Lỗi nhập liệu",
//                    "Vui lòng nhập tên người dùng!", CustomMessageDialog.MESSAGE);
                return;
            }

            String pass = txtPass.getText();
            if (Validator.isEmpty(pass)) {
//            new CustomMessageDialog(null, true, "Lỗi nhập liệu",
//                    "Vui lòng nhập mật khẩu người dùng!", CustomMessageDialog.MESSAGE);
                return;
            }
            //JOptionPane.showMessageDialog(this, "co van de");
            boolean isAdmin = false;
            isAdmin = chkAdmin.isSelected();
            //Thực hiện việc thêm người dùng vào cơ sở dữ liệu.
            try {
                long id = Long.parseLong(idtext);
                UserDAO.UpdateUser(new UserDTO(id, name, pass, isAdmin));
                new CustomMessageDialog(null, true, "Thành công", "Cập nhật người dùng thành công", CustomMessageDialog.DONE);
                dispose();
//            ManageUser.reloadTable();
            } catch (NumberFormatException ex) {
                new CustomMessageDialog(null, true, "Lỗi nhập liệu",
                        "Vui lòng kiểm tra giá trị nhập liệu!", CustomMessageDialog.MESSAGE);
            } catch (ClassNotFoundException ex) {
                new CustomMessageDialog(null, true, "Lỗi cơ sở dữ liệu",
                        "Có lỗi trong quá trình cập nhật người dùng", CustomMessageDialog.MESSAGE);
            } catch (SQLException ex) {
                new CustomMessageDialog(null, true, "Lỗi cơ sở dữ liệu",
                        "Có lỗi trong quá trình cập nhật người dùng", CustomMessageDialog.MESSAGE);
            }
        }
    }//GEN-LAST:event_jbtAddActionPerformed

    private void btCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btCancelActionPerformed
        // TODO add your handling code here:
        dispose();
    }//GEN-LAST:event_btCancelActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btCancel;
    private javax.swing.JCheckBox chkAdmin;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JButton jbtAdd;
    private javax.swing.JTextField txtId;
    private javax.swing.JTextField txtPass;
    private javax.swing.JTextField txtUsername;
    // End of variables declaration//GEN-END:variables
}
